v#include <Wire.h>

// 根据实际连接修改引脚定义
#define SDA_PIN 27
#define SCL_PIN 26

void setup() {
  Serial.begin(115200);
  Serial.println("\nI2C总线扫描工具");
  Serial.print("SDA引脚: ");
  Serial.println(SDA_PIN);
  Serial.print("SCL引脚: ");
  Serial.println(SCL_PIN);
  Serial.println("开始扫描...");
  
  // 初始化I2C总线
  Wire.begin(SDA_PIN, SCL_PIN);
  
  int deviceCount = 0;
  for (byte address = 8; address < 127; address++) {
    // 尝试连接到当前地址
    Wire.beginTransmission(address);
    byte error = Wire.endTransmission();
    
    if (error == 0) {
      // 成功连接，设备存在
      Serial.print("找到I2C设备，地址 = 0x");
      if (address < 16) Serial.print("0");
      Serial.println(address, HEX);
      deviceCount++;
    } else if (error == 4) {
      // 未知错误
      Serial.print("未知错误，地址 = 0x");
      if (address < 16) Serial.print("0");
      Serial.println(address, HEX);
    }
  }
  
  if (deviceCount == 0) {
    Serial.println("未找到I2C设备！");
    Serial.println("请检查:");
    Serial.println("1. 设备电源是否正常");
    Serial.println("2. SDA/SCL引脚连接是否正确");
    Serial.println("3. 是否有上拉电阻");
  } else {
    Serial.print("扫描完成，共找到 ");
    Serial.print(deviceCount);
    Serial.println(" 个I2C设备。");
  }
}

void loop() {
  // 不需要循环，扫描一次即可
  delay(10000); // 等待10秒后重新扫描
}
